package cn.b.sky.mes.mm.service;

import java.util.List;
import java.util.Map;

import cn.b.sky.mes.mm.model.Distribution;
import cn.b.sky.mes.mm.model.Requirement;
import cn.b.sky.mes.mm.model.condition.DistributionCondition;
import cn.b.sky.mes.mm.model.condition.RequirementCondition;
import cn.b.sky.common.model.Page;
import cn.b.sky.user.service.model.ECode;

/**
 * 
 * <strong>Title : RequirementService.java<br></strong>
 * <strong>Package : cn.b.sky.mes.mm.service<br></strong>
 * <strong>Description : </strong>物料需求数据服务接口<br> 
 * <strong>Create on : 2016年9月13日 上午11:30:48<br></strong>
 * <p>
 * @author dapeng.li<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 * <strong>修改历史:</strong><br>
 * 修改人|修改日期|修改描述<br>
 * -------------------------------------------<br>
 * <br>
 * <br>
 */
public interface RequirementService {

  /**
   * 
   * <strong>Title : batchSaveRequirements<br></strong>
   * <strong>Description : </strong>批量保存需求列表<br> 
   * <strong>Create on : 2016年9月13日 下午1:33:06<br></strong>
   * <p>
   * @param requirements
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void batchSaveRequirements(List<Requirement> requirements);

  /**
   * 
   * <strong>Title : insertRequirement<br></strong>
   * <strong>Description : </strong>新增物料需求<br> 
   * <strong>Create on : 2016年9月13日 下午2:44:37<br></strong>
   * <p>
   * @param requirement
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertRequirement(Requirement requirement);

  /**
   * 
   * <strong>Title : getHistoryRequirementCount<br></strong>
   * <strong>Description : </strong>获取物料历史需求数量（相同线边库及库位）<br> 
   * <strong>Create on : 2016年9月18日 下午2:23:58<br></strong>
   * <p>
   * @param requirement
   * @return
   * double
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  double getHistoryRequirementCount(Requirement requirement);

  /**
   * 
   * <strong>Title : SelectRequirementListByCondition<br></strong>
   * <strong>Description : </strong>根据条件查询物料台账需求<br> 
   * <strong>Create on : 2016-9-23 下午6:40:29<br></strong>
   * <p>
   * @param condition
   * @return
   * List<Requirement>
   * @throws 
   * @author ZhiPeng.Tong<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Requirement> SelectRequirementListByCondition(RequirementCondition condition);

  /**
   * 
   * <strong>Title : SelectRequirementCountByCondition<br></strong>
   * <strong>Description : </strong>物料需求台账记录<br> 
   * <strong>Create on : 2016-9-23 下午6:39:48<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author ZhiPeng.Tong<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int SelectRequirementCountByCondition(RequirementCondition condition);

  /**
   * 
   * <strong>Title : getRequirementStatus<br></strong>
   * <strong>Description : </strong>统计需求的状态<br> 
   * <strong>Create on : 2016年9月22日 上午10:10:12<br></strong>
   * <p>
   * @param condition
   * @param eCodes
   * @return
   * Map<String,Integer>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Map<String, Integer> getRequirementStatus(RequirementCondition condition, List<ECode> eCodes);

  /**
   * 
   * <strong>Title : getRequirementsByCondition<br></strong>
   * <strong>Description : </strong>需求分页查询<br> 
   * <strong>Create on : 2016年9月22日 下午3:03:50<br></strong>
   * <p>
   * @param condition
   * @return
   * Page
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Page getRequirementsByCondition(RequirementCondition condition);

  /**
   * 
   * <strong>Title : getOvertimeRequirementsByCondition<br></strong>
   * <strong>Description : </strong>分页查询配送超时的需求<br> 
   * <strong>Create on : 2016年9月22日 下午3:55:36<br></strong>
   * <p>
   * @param condition
   * @return
   * Page
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Page getOvertimeRequirementsByCondition(RequirementCondition condition);

  /**
   * 
   * <strong>Title : getDistributionsByRequirement<br></strong>
   * <strong>Description : </strong>获取需求的配送列表<br> 
   * <strong>Create on : 2016年9月23日 上午9:30:08<br></strong>
   * <p>
   * @param siteCode
   * @param requirementNum
   * @return
   * List<Distribution>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Distribution> getDistributionsByRequirement(String siteCode, String requirementNum);

  /**
   * 
   * <strong>Title : getDistributionsByRequirement<br></strong>
   * <strong>Description : </strong>获取需求对应的配送列表<br> 
   * <strong>Create on : 2016年9月23日 下午1:31:11<br></strong>
   * <p>
   * @param condition
   * @return
   * Page
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Page getDistributionsByRequirement(DistributionCondition condition);

  /**
   * 
   * <strong>Title : getRequirement<br></strong>
   * <strong>Description : </strong>根据条件查询物料需求<br> 
   * <strong>Create on : 2016-9-23 下午6:38:05<br></strong>
   * <p>
   * @param siteCode
   * @param requirement
   * @return
   * Requirement
   * @throws 
   * @author ZhiPeng.Tong<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Requirement getRequirement(String siteCode, String requirementNum);

  /**
   * 
   * <strong>Title : SelectRequirement<br></strong>
   * <strong>Description : </strong>获取物料需求详情<br> 
   * <strong>Create on : 2016-9-26 上午10:56:05<br></strong>
   * <p>
   * @param siteCode
   * @param requirementNum
   * @return
   * List<Requirement>
   * @throws 
   * @author ZhiPeng.Tong<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Requirement> selectRequirement(String siteCode, String requirementNum);

  /**
   * 
   * <strong>Title : cancelStatusECode<br></strong>
   * <strong>Description : </strong>取消物料需求<br> 
   * <strong>Create on : 2016-9-26 下午1:46:13<br></strong>
   * <p>
   * @param requirementNum
   * @param siteCode
   * void
   * @throws 
   * @author ZhiPeng.Tong<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   * @return 
   */
  String cancelStatusECode(String siteCode, String code);

}
